﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

using modEscenario;
using modUtileria;
using modEspectador;
using modPeticiones;

using modDatos;
using modInterface;

namespace modActor
{
    public class CActor : IActor
    {
        public CActorDatos data = new CActorDatos();
        public List<CActorDatos> otroActores = new List<CActorDatos>();

        public void init()
        {
            data.escenarioDatos = new CescenarioDatos();
            data.espectadorDatos = new CespectadorDatos();
            data.drawDatos = new CDrawDatos();
            data.peticionesDatos = new CPeticionesdatos();

            data.peticionesDatos.myEstado = new Dictionary<string,pqEstado_dat>();
            data.peticionesDatos.myEstadoMultiple = new Dictionary<string, pqEstadoMulti_dat>();
        }

        public Rectangle refactorRect()
        {
            //Rectangle rect = new Rectangle ( (data.texture.Width / data.frameTotal) * data.frameActual
            //                                , 0
            //                                , data.texture.Width / data.frameTotal
            //                                , data.texture.Height );

            Rectangle rect = new Rectangle(0, 0, data.drawDatos.texture.Width, data.drawDatos.texture.Height);
            return rect;
        }

        //Interfaz Escenario
        public CescenarioDatos darDatosEscenario() { return data.escenarioDatos; }
        public virtual void drawInEscenary(ref SpriteBatch sprite)
        {
            sprite.Draw(data.drawDatos.texture, data.escenarioDatos.posicion, data.escenarioDatos.recorte, Color.White);
        }
        public virtual void ensayar(Microsoft.Xna.Framework.GameTime gameTime)
        {
            CSespectador.ensayarConMouse(this);
            CSespectador.ensayarConTeclado(this);                   
        }
        public virtual string returnName() { return data.escenarioDatos.primarykey; }
        //Interfaz utilerica
        public void recibirUtileria(Texture2D textura)
        {
            data.drawDatos.texture = textura;
            //data.recorte = refactorRect ( );
        }
        public void recibirUtileria(Song sonido)
        {
            throw new NotImplementedException();
        }

        //Interfaz Espectador
        public virtual void setearEstadosPorMouse(MouseState estado) { data.espectadorDatos.newMouseState = estado; }
        public virtual void setearEstadosPorKeyBoard(KeyboardState estado) { data.espectadorDatos.newStateKeyboard = estado; }
        public virtual void setearEstados() { }

        //Interface Logistica
        public virtual void escucharRta() { }
        public virtual void pedirRta() { }
        public virtual void retornoRta() { }

        //Interface Peticiones        
        public virtual void DarDatos()
        {
 
        }
    }
}
